/**
 * \file kernel/klibc/malloc.c
 * \author Davide Gessa
 * \note Allocazione della memoria
 * \date 10-12-09
 */
#include <klibc/ctype.h>
#include <klibc/malloc.h>
#include <mm/mm.h>

uint32_t allocazioni;


/**
 * Alloca e azzera
 */
void *calloc(size_t size)
{
	int x;
	char *adr = (char *) mm_kalloc(size);
	char *j = adr;

	for(x = 0; x < size; x++)
	{
		*j = 0;
		j++;
	}
	return (void *) adr;
}


/**
 * Alloca
 */
void *malloc(size_t size)
{
	allocazioni++;
	//printf("malloc %d\n", allocazioni);
	return (void *) mm_kalloc(size);
}


/**
 * Rialloca
 */
void *realloc(void *adr, size_t size)
{
	void *new = (void *) mm_kalloc(size);
	memcpy(new, adr, size);
	free(adr);

	return (void *) new;
}


/**
 * Libera
 */
void free(void *adr)
{
	allocazioni--;
	//printf("free %d\n", allocazioni);
	mm_kfree(adr);
}
